package com.artevivo.entidades;

import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;

@Entity
@Table(name = "ESPECIALIDADES")
public class Especialidad implements Serializable {

    /**
     * 
     */
    private static final long serialVersionUID = 2110256004599009866L;

    // PrimaryKey
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "IdEspecialidad", unique = true, nullable = false)
    private Long idEspecialidad;

    // Atributos
    /** The nombre. */
    @Column(name = "Nombre", unique = false, nullable = false)
    private String nombre;

    /** The descripcion. */
    @Column(name = "Tipo", unique = false, nullable = false)
    private String tipo;

    @OneToMany(mappedBy = "especialidad")
    private Set<PrecioEspecialidad> precios = new HashSet<PrecioEspecialidad>();

    @OneToMany(mappedBy = "especialidad")
    private Set<EstiloPorEspecialidad> estilosPorEspecialidades = new HashSet<EstiloPorEspecialidad>();

    @OneToMany(mappedBy = "especialidad")
    private Set<Curso> cursos = new HashSet<Curso>();

    public Especialidad() {
        super();
    }

    public Especialidad(String nombre, String tipo) {
        this.nombre = nombre;
        this.tipo = tipo;
    }

    public Long getIdEspecialidad() {
        return idEspecialidad;
    }

    public void setIdEspecialidad(Long idEspecialidad) {
        this.idEspecialidad = idEspecialidad;
    }

    public String getNombre() {
        return nombre;
    }

    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    public String getTipo() {
        return tipo;
    }

    public void setTipo(String tipo) {
        this.tipo = tipo;
    }

    public Set<PrecioEspecialidad> getPrecios() {
        return precios;
    }

    public void setPrecios(Set<PrecioEspecialidad> precios) {
        this.precios = precios;
    }

    public Set<EstiloPorEspecialidad> getEstilosPorEspecialidades() {
        return estilosPorEspecialidades;
    }

    public void setEstilosPorEspecialidades(Set<EstiloPorEspecialidad> estilosPorEspecialidades) {
        this.estilosPorEspecialidades = estilosPorEspecialidades;
    }

    public Set<Curso> getCursos() {
        return cursos;
    }

    public void setCursos(Set<Curso> cursos) {
        this.cursos = cursos;
    }

    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + ((idEspecialidad == null) ? 0 : idEspecialidad.hashCode());
        result = prime * result + ((nombre == null) ? 0 : nombre.hashCode());
        result = prime * result + ((tipo == null) ? 0 : tipo.hashCode());
        return result;
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj) {
            return true;
        }
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        Especialidad other = (Especialidad) obj;
        if (idEspecialidad == null) {
            if (other.idEspecialidad != null) {
                return false;
            }
        } else if (!idEspecialidad.equals(other.idEspecialidad)) {
            return false;
        }
        if (nombre == null) {
            if (other.nombre != null) {
                return false;
            }
        } else if (!nombre.equals(other.nombre)) {
            return false;
        }
        if (tipo == null) {
            if (other.tipo != null) {
                return false;
            }
        } else if (!tipo.equals(other.tipo)) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "Especialidad [idEspecialidad=" + idEspecialidad + ", nombre=" + nombre + ", tipo=" + tipo + "]";
    }
}
